<?php
/*
 * O filtro a a classe utilizada para receber os parâmetros de pesquisa
 * da listagem. Ele pode ser serializado e persistido na sessão.
 * O filtro guarda os parâmetros conforme recebidos.
 * Para se usar estes parâmetros precisamos de transformalos na
 * hora de joga-los para uma consulta.
 *
 * Esta pode ainda não ser a melhor implementação para persistir
 * o filtro pois persistimos um filtro com informações de formato
 * de dados do template.
 *
 * Uma melhor implementação será já transformar isso para dados
 * em formato padrão da camada de negócio de modo que possa ser
 * transformado transparentemente em uma consulta.
 */
class Filtro extends FormData {

	var $padroes;

	function __construct($array=array(),$padroes=array()) {
		if(!$array) $array = array();
		parent::__construct($array);
		$this->padroes = $padroes;
	}

	function get($nome,$format = null) {
		if(isset($this->array[$nome]) || isset($this->array[$nome.'__data']))
		{
			return parent::get($nome,$format);
		}
		
		if(isset($this->padroes[$nome])) 
		{
			return $this->padroes[$nome];
		}
		else 
		{
			return null;
		}
	}

	function temItemRelacionado($key,$value) {
		if(is_object($value)) {
			$pkName = $value->getTable()->getIdentifier();
			$value = $value->get($pkName);
		}
		if( isset($this->array[$key]) ) {
			if (isset($this->array[$key][$value])) {
				return (boolean)$this->array[$key][$value];
			}
		}
		else {
			return false;
		}
	}

	/*
	 * Se tiver recebido um array, mesmo que com tudo vazio, considera que recebeu.
	 */
	function recebeuValor() {
		return is_array($this->array);
	}

	function ativo() {
		foreach($this->array as $i) {
			if($i) return true;
		}
		return false;
	}
	
	function set($key, $value)
	{
		$this->padroes[$key] = $value;	
	}

}